package com.caocaog.market.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.caocaog.market.entity.GoodsCategories;
import com.caocaog.market.vo.LabelAndValueVo;
import org.jeecg.common.system.base.service.GenericService;

import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.List;

/**
 * 商品分类
 *
 * @author chechen
 * @date 2022-04-13
 */
public interface GoodsCategoriesService extends GenericService<GoodsCategories> {

    /**
     * 查询商品分类信息分页
     * 会自动将排序字段改为 sort dest + createTime dest
     *
     * @param page            分页信息
     * @param goodsCategories 查询条件
     * @return 商品分类分页
     */
    IPage<GoodsCategories> queryGoodsCategoriesPage(Page<GoodsCategories> page, GoodsCategories goodsCategories);

    /**
     * 根据店铺id获取状态为显示（isShow为1）的商品分类列表
     *
     * @param shopId 店铺id
     * @return 状态为显示商品分类列表
     * @see #selectListByFieldCache
     */
    List<GoodsCategories> getShowGoodsCategoriesByShopId(String shopId);

    /**
     * 后台管理新增编辑商品时的选择商品规格数据
     *
     * @param shopId 店铺id
     * @return [{label, value}...]
     */
    List<LabelAndValueVo> getCategoriesLV(String shopId);

    /**
     * 新增商品分类（缓存）
     *
     * @param goodsCategories 商品分类信息
     * @return 插入后的商品分类信息
     */
    GoodsCategories insertGoodsCategories(GoodsCategories goodsCategories);

    /**
     * 根据id更新商品分类（缓存）
     *
     * @param goodsCategories 商品分类信息
     * @return 商品分类信息
     */
    GoodsCategories updateGoodsCategories(GoodsCategories goodsCategories);

    /**
     * 删除商品分类（缓存）
     *
     * @param ids 商品分类ids
     * @return 受影响行数
     */
    int deleteGoodsCategories(String... ids);

    /**
     * 根据店铺ids获取商品分类ids
     *
     * @param shopIds 店铺ids
     * @return 商品分类ids
     * @see #selectListByFieldCache
     */
    String[] getGoodsCategoriesIdsByShopIds(@NotNull @Size(min = 1) String... shopIds);



}